/*************************************************************************
        > File Name: configuration.h
        > Author: xuwenlong
        > Mail: myxuan475@126.com
        > Created Time: 2018年02月05日 星期一 15时29分59秒
 ************************************************************************/

#ifndef LIBXCOM_TEMPLATE_H
#define LIBXCOM_TEMPLATE_H

#include "data.h"
#include "operator.h"
#include <map>
#include <stack>
#include <stdio.h>
#include <string>
#include <utils/lock.h>
#include <vector>

namespace libxcom {

typedef struct {
    bool success;
    std::string func;
    std::shared_ptr<Express> expr;
} ExprItem;

class Template {
public:
    Template(int32_t model);
    Template();
    virtual ~Template();

    bool IsParse();
    bool Parse();
    bool Parse(const std::string &temp);
    std::string StyleParse(const std::string &temp, std::vector<ExprItem> &listfuncs);
    void ClearAll();

    bool IsEqual(int32_t model);

    virtual std::shared_ptr<Express> LocateFunction(const char *def, int funcId = -1);

    bool UpdateTemplate();

private:
    std::map<std::string, std::shared_ptr<Express>> m_mapFunctions;
    Lock m_iLock;
    int32_t m_model;
    std::string m_strtemp;
};
} // namespace libxcom
#endif // LIBXCOM_TEMPLATE_H
